/**
 * HMI 只读选择组件类型定义
 *
 * 该组件用于显示只读的数据表格，支持分页、选择、搜索等功能
 * 参考 HmiBatchUpdate 的架构设计，提供统一的配置接口和事件处理
 */

/**
 * 表格行数据接口
 */
export interface HmiOnlySelectRow {
  /** 动态属性，支持任意字段 */
  [key: string]: any;
  /** 行索引，用于内部标识 */
  _index: number;
}

/**
 * 列配置接口
 */
export interface HmiOnlySelectColumnConfig {
  /** 列字段名 */
  key?: string;
  /** 列显示标题 */
  label?: string;
  /** 列数据类型 */
  type?: "enum" | "number" | "string" | "boolean";
  /** 列固定宽度 */
  width?: number;
  /** 列最小宽度 */
  minWidth?: number;
  /** 枚举类型选项配置 */
  enumOptions?: Array<{ value: any; label: string }>;
  /** 自定义格式化函数 */
  formatter?: (value: any, row: HmiOnlySelectRow) => string;
}

/**
 * 组件主配置接口
 */
export interface HmiOnlySelectConfig {
  /** API 请求路径 */
  apiPath: string;
  /** 主键字段名 */
  idKey: string;
  /** 列配置数组 */
  columns: HmiOnlySelectColumnConfig[];
  /** 是否显示定值区 */
  showSettingZone?: boolean;
  /** 当前显示的定值区编号 */
  displayZone?: number;
  /** 分页配置 */
  pagination?: {
    /** 每页显示条数 */
    pageSize: number;
    /** 是否显示页面大小选择器 */
    showSizeChanger?: boolean;
  };
  /** 查询参数配置 */
  queryOptions?: {
    /** 分组参数 */
    group?: number[];
    /** 其他过滤条件 */
    filters?: Record<string, any>;
  };
  /** 数据排序字段 */
  orderByKey?: string;
}

/**
 * 组件事件接口
 */
export interface HmiOnlySelectEmits {
  /** 数据加载完成事件 */
  "data-loaded": [data: HmiOnlySelectRow[]];
  /** 选择变更事件 */
  "selection-change": [selection: HmiOnlySelectRow[]];
  /** 行点击事件 */
  "row-click": [row: HmiOnlySelectRow];
  /** 错误事件 */
  error: [error: Error];
}

/**
 * 组件属性接口
 */
export interface HmiOnlySelectProps {
  /** 组件配置 */
  config: HmiOnlySelectConfig;
  /** 是否显示加载状态 */
  loading?: boolean;
  /** 是否支持行选择 */
  selectable?: boolean;
  /** 是否显示工具栏 */
  showToolbar?: boolean;
  /** 是否显示导出按钮 */
  showExport?: boolean;
  /** 是否高亮当前行 */
  highlightCurrentRow?: boolean;
}
